package org.chen.scene.utils;

import java.util.UUID;

public class QdrantIdUtils {
    
    /**
     * 将字符串ID转换为UUID格式
     * 使用确定性算法，确保相同的字符串总是生成相同的UUID
     */
    public static String stringToUuid(String stringId) {
        if (stringId == null || stringId.isEmpty()) {
            return UUID.randomUUID().toString();
        }
        
        // 使用字符串的哈希值创建确定性UUID
        // 这样相同的商品ID总是生成相同的UUID
        return UUID.nameUUIDFromBytes(stringId.getBytes()).toString();
    }
    
    /**
     * 检查字符串是否是有效的UUID格式
     */
    public static boolean isValidUuid(String str) {
        try {
            UUID.fromString(str);
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }
    
    /**
     * 检查字符串是否是有效的无符号整数
     */
    public static boolean isValidUnsignedInteger(String str) {
        try {
            long value = Long.parseLong(str);
            return value >= 0 && value <= 4294967295L; // 32位无符号整数范围
        } catch (NumberFormatException e) {
            return false;
        }
    }
    
    /**
     * 转换为Qdrant有效的点ID
     */
    public static Object toValidPointId(String productId) {
        if (productId == null || productId.isEmpty()) {
            return UUID.randomUUID().toString();
        }
        
        // 如果已经是UUID格式，直接返回
        if (isValidUuid(productId)) {
            return productId;
        }
        
        // 如果是有效地无符号整数，转换为Long
        if (isValidUnsignedInteger(productId)) {
            return Long.parseLong(productId);
        }
        
        // 否则转换为UUID
        return stringToUuid(productId);
    }
}
